package main

import "fmt"

/*
 结构体的匿名字段
 结构体允许其成员在声明时没有字段名而只有类型，这种没有名字的字段就称为匿名字段

*/

type People struct {
	int
	string
}

/*
  结构体的字段类型可以是：基本数据类型，也可以是切片、Map以及结构体
  如果结构体的字段类型是：指针，slice，和map的零值都是nil，即还没有分配空间
  如果需要使用这样的字段，需要现make，才能使用。
*/

type Dog struct {
	name  string
	hobby []string
	age   int
	maps  map[string]string
}

/*
   结构体嵌套
*/

type User struct {
	UserName string
	Password string
	Address  Address //表示结构体User嵌套结构体
}

type Address struct {
	Name  string
	Phone string
	City  string
}

func main() {
	p1 := People{1, "OK"}
	fmt.Printf("%#v\n", p1)

	var d1 Dog
	d1.name = "小狗"
	d1.age = 3
	d1.hobby = []string{"吃屎", "叫"}
	d1.maps = make(map[string]string, 1) //需要先创建
	d1.maps["aaa"] = "bbb"
	fmt.Printf("%#v\n", d1)
	//main.Dog{name:"小狗", hobby:[]string{"吃屎", "叫"}, age:3, maps:map[string]string{"aaa":"bbb"}}

	var u User = User{
		UserName: "罗嘉良",
		Password: "1234",
		Address: Address{
			Name:  "小红",
			Phone: "123",
			City:  "上海",
		},
	}

	fmt.Printf("%#v\n", u)
	//main.User{UserName:"罗嘉良", Password:"1234", Address:main.Address{Name:"小红", Phone:"123", City:"上海"}}
}
